#include <algorithm>
#include <iostream>
using namespace std;
class CBST{
private:
    int element[1005];
    int size;
    int popsequence[1005];
    int finalseq[1005];
    class Stack{
    public:
	int top;
	int data[1005];
    };
    Stack S;
public:
    CBST(){
	cin>>size;
	for(int i=0;i<size;i++){
	    cin>>element[i];
	}
	sort(element,element+size);
    }
    void Build();
    void Print(){
	for(int i=0;i<size-1;i++){
	    cout<<finalseq[i]<<" ";
	}
	cout<<finalseq[size-1]<<endl;
    }
    void push(int n){
	S.data[S.top++]=n;
    }
    int pop(){
	return S.data[--S.top];
    }
    int Left(int p){
	return 2*p+1;
    }
    int Right(int p){
	return 2*p+2;
    }
};
void CBST::Build(){
    int index=0;
    int popnum=0;
    push(index);
    index=Left(index);
    while(popnum<size){
	if(index<size){//compress
	    push(index);
	    index=Left(index);
	    continue;
	}
	else{
	    index=pop();
	    popsequence[popnum++]=index;
	    index=Right(index);
	}
    }
    for(int i=0;i<size;i++){
	finalseq[popsequence[i]]=element[i];
    }
}
int main(){
    CBST Tree;
    Tree.Build();
    Tree.Print();
}
